#include "asr_pro.h"

#define ASR_BUF_SIZE 2048

ASR_TypeDef ASRStatus = {0, 0};

uint8_t asr_rx_buf[ASR_BUF_SIZE] = {0}; // 接收缓冲区
// uint8_t asr_rx_flag = 0;           // 接收完成标志
uint16_t asr_rx_index = 0; // 接收索引

uint8_t ASR_get_receive_flag(void)
{
	uint8_t flag = ASRStatus.receiveDataFlag;
	ASRStatus.receiveDataFlag = 0;
	return flag;
}

void asr_proc(void)
{
	// 语音控制外设
	if (strstr((const char *)asr_rx_buf, "Dis") != NULL)
	{
		// 执行求救任务
		jinji = 1;
		buzz_play();
		sim800l_dial();
		asr_clear_buffer();
	}
	if (strstr((const char *)asr_rx_buf, "amo") != NULL)
	{
		jinji = 0;
		asr_clear_buffer();
	}
	if (strstr((const char *)asr_rx_buf, "Bod") != NULL)
	{
		// 体温获取并播报
		Read_T = memread();
		sprintf(My_T,"当前体温是:%d摄氏度",Read_T+3);
		
		asr_clear_buffer();
		delay_ms(200);
//		SYN_FrameInfo(2,"当前体温是");
		//delay_ms(1500);
		SYN_FrameInfo(2, (My_T)) ;
		asr_clear_buffer();
	}
//	if (strstr((const char *)asr_rx_buf, "Oli") != NULL)
//	{
//		// 打开灯光并播报
//	}
//	if (strstr((const char *)asr_rx_buf, "Cli") != NULL)
//	{
//		// 关闭灯光并播报
//	}
	if (strstr((const char *)asr_rx_buf, "fal") != NULL)
	{
		// 跌倒
		jinji = 1;
		buzz_play();
		sim800l_dial();
 		asr_clear_buffer();
	}	
	if(strstr((const char *)asr_rx_buf,"jwe") != NULL)
	{
		// 获取天气并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"今天的天气是");
		delay_ms(1500);
		SYN_FrameInfo(2, (one_w));
		asr_clear_buffer();
	}
	if(strstr((const char *)asr_rx_buf,"mwe") != NULL)
	{
		// 获取天气并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"明天的天气是");
		delay_ms(1500);
		SYN_FrameInfo(2, (two_w));
		asr_clear_buffer();
	}
	if(strstr((const char *)asr_rx_buf,"hwe") != NULL)
	{
		// 获取天气并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"后天的天气是");
		delay_ms(1500);
		SYN_FrameInfo(2, (three_w));
		asr_clear_buffer();
	}
	if(strstr((const char *)asr_rx_buf,"dhw") != NULL)
	{
		// 获取天气并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"大后天的天气是");
		delay_ms(1500);
		SYN_FrameInfo(2, (four_w));
		asr_clear_buffer();
	}
	if(strstr((const char *)asr_rx_buf,"Jte") != NULL)
	{
		// 获取温度并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"今天的温度是");
		delay_ms(1500);
		SYN_FrameInfo(2, (one_t));
		asr_clear_buffer();
	}
	if(strstr((const char *)asr_rx_buf,"Mte") != NULL)
	{
		// 获取温度并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"明天的温度是");
		delay_ms(1500);
		SYN_FrameInfo(2, (two_t));
		asr_clear_buffer();
	}
	if(strstr((const char *)asr_rx_buf,"Hte") != NULL)
	{
		// 获取温度并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"后天的温度是");
		delay_ms(1500);
		SYN_FrameInfo(2, (three_t));
		asr_clear_buffer();
	}
	if(strstr((const char *)asr_rx_buf,"Dhte") != NULL)
	{
		// 获取温度并播报
		asr_clear_buffer();
		delay_ms(200);
		SYN_FrameInfo(2,"大后天的温度是");
		delay_ms(1500);
		SYN_FrameInfo(2, (four_t));
		asr_clear_buffer();
	}
	// 获取api信息 并播报
	if (strstr((const char *)asr_rx_buf, "tim") != NULL)
	{
		Uart1_SendStr_utf8("现在几点了，回复北京时间(年月日 时分秒 一行搞定)");
		asr_clear_buffer();
	}
	if (strstr((const char *)asr_rx_buf, "hots") != NULL)
	{
		Uart1_SendStr_utf8("最近五天的热点有什么，给出三个随机 热点（每个热点50字左右）");
		asr_clear_buffer();
	}
	if (strstr((const char *)asr_rx_buf, "mak") != NULL)
	{
		Uart1_SendStr_utf8("给我提供随机一条化妆建议,50字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}
	if (strstr((const char *)asr_rx_buf, "jok") != NULL)
	{
		Uart1_SendStr_utf8("给我讲一些随机笑话,80字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}
	if (strstr((const char *)asr_rx_buf, "sun") != NULL)
	{
		Uart1_SendStr_utf8("给我一些防晒建议,50字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}	
	if (strstr((const char *)asr_rx_buf, "Twa") != NULL)
	{
		Uart1_SendStr_utf8("根据广州天气，给我适合今天天气的洗澡水温建议,30字以内回答");
		asr_clear_buffer();
	}	
	if (strstr((const char *)asr_rx_buf, "Clo") != NULL)
	{
		Uart1_SendStr_utf8("给我随机一些穿衣建议,50字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}	
	if (strstr((const char *)asr_rx_buf, "htw") != NULL)
	{
		Uart1_SendStr_utf8("给我随机一条《十万个为什么》，80字以内回答，之后回答的知识内容 不要重复");
		asr_clear_buffer();
	}
	if (strstr((const char *)asr_rx_buf, "hea") != NULL)
	{
		Uart1_SendStr_utf8("给我一些保持健康的小知识,50字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}	
	if (strstr((const char *)asr_rx_buf, "Ins") != NULL)
	{
		Uart1_SendStr_utf8("给我一些随机且励志的鸡汤语录,80字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}	
	if (strstr((const char *)asr_rx_buf, "Air") != NULL)
	{
		Uart1_SendStr_utf8("给我今天的空气质量,30字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}	
	if (strstr((const char *)asr_rx_buf, "Was") != NULL)
	{
		Uart1_SendStr_utf8("给我一些随机的洗护建议,30字以内回答，要求与上一次建议不同");
		asr_clear_buffer();
	}	 
}

void asr_clear_buffer(void)
{
	memset(asr_rx_buf, 0, sizeof(asr_rx_buf));
	asr_rx_index = 0;
}

/**
 * @brief USART 接收到的数据处理
 * @param byte 当前接收到的字节
 */
void asr_pro_callback(uint8_t byte)
{
	asr_rx_buf[asr_rx_index++] = byte; // 接收数据转存
	if (asr_rx_index > ASR_BUF_SIZE)   // 判断接收数据是否溢出
	{
		asr_clear_buffer();
	}
	if (asr_rx_index >= 2 && (asr_rx_buf[asr_rx_index - 2] == '\r' && asr_rx_buf[asr_rx_index - 1] == '\n')) // 判断结束位
	{
		ASRStatus.receiveDataFlag = 1;
	}
}
